In [1]:
"""環境"""
# .lab
"""更新履歴"""
# 最終更新日:2025/05/21
# 2025/05/21 shutilを使って、cachedirを洗浄することにしました
# 2025/05/15 simple_progress_barおよびdata(dict)を使い始めました。
# 2025/02/25 os.getcwd()を採用し、__file__を定義する必要をなくしました。
"""モジュール読み込み"""
# ファイル操作等
import sys
import os
# from datetime import datetime
from pprint import pprint
import logging
# import pickle
# import struct
from tqdm import tqdm
import h5py
# import threading
import json
# tkinter
from tkinter import filedialog, messagebox, Tk
# データ分析ツール
import pandas as pd
import numpy as np
import scipy as sp
# import math
# from sklearn.linear_model import LinearRegression
# グラフ等作成用
import matplotlib
import matplotlib.pyplot as plt # 図の作成用
from PIL import Image as im
# import cv2
from IPython.display import display, HTML, clear_output, update_display, Image
# 自作モジュール
sys.path.append(r"C:\Users\okaza\pythonenv")
from modules.Mytools.Tools import print_fileinfo, h5_tree, dict_tree, simple_progress_bar, clean_cache_except_logfiles, get_total_size
import modules.Mytools.Settings
import modules.fitXRD as fx
from modules.peakfit import peakfit, pseudoVoigt
"""ログ管理ツール作成"""
# chche directoryの設定
cachedir = os.path.abspath(os.getcwd() + "/.cache")
clean_cache_except_logfiles(cachedir)
os.makedirs(cachedir, exist_ok=True)
# loggerの作成
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
format = "%(levelname)-9s %(asctime)s [%(filename)s:%(lineno)d] %(message)s"
# Streamハンドラクラスを作成
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)
sh.setFormatter(logging.Formatter(format))
logger.addHandler(sh)
# Fileハンドラクラスをインスタンス化
logfile = cachedir + ""
fh = logging.FileHandler(filename=cachedir + "/notebook.log", encoding="utf-8")
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter(format))
logger.addHandler(fh)
logger.debug("[Activate workspace]: " + os.getcwd())
logger.debug("[Set cache]: "+ os.path.abspath(cachedir))
logger.debug("[Activate log]: " + os.path.abspath(cachedir + "/notebook.log"))
# globalなデータを作成
data = dict()
logger.debug("[Create global variable]: data")
DEBUG 2025-06-27 10:30:06,148 [388102471.py:71] [Activate workspace]: c:\Users\okaza\pythonenv\fpd\fitting_csv DEBUG 2025-06-27 10:30:06,149 [388102471.py:72] [Set cache]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache DEBUG 2025-06-27 10:30:06,150 [388102471.py:73] [Activate log]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\notebook.log DEBUG 2025-06-27 10:30:06,150 [388102471.py:77] [Create global variable]: data
目的¶
csvファイルを読み込んでフィッティングを行います。
1. ファイルの読み込み¶
まずファイルリストを作成します。
In [3]:
def set_filelist():
# ディレクトリ名を指定
dir = r"C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv"
# ヘッダーとフッターを指定
header = "mDIH08_48_"
footer = ".csv"
if True: # Main
# ヘッダーとフッターを含むファイル名を取得
flist = list()
for __ in os.listdir(dir):
if not header in __:
continue
if not footer in __:
continue
flist.append(__)
logger.debug("Read filenames")
# ソート
flist.sort(key = (lambda x: int(x.replace(header, "").replace(footer, ""))))
logger.debug("Sort the file name list")
# 表示
for f in flist:
print(os.path.abspath(dir + "/" + f))
# 格納
key = sys._getframe().f_code.co_name
data[key] = dict()
data[key]["dir"] = dir
data[key]["flist"] = flist
data[key]["header"] = header
data[key]["footer"] = footer
logger.info("[Add variables]: " + key)
dict_tree(data)
return
set_filelist()
del set_filelist
DEBUG 2025-06-27 10:30:48,537 [3435577160.py:20] Read filenames DEBUG 2025-06-27 10:30:48,538 [3435577160.py:24] Sort the file name list INFO 2025-06-27 10:30:48,540 [3435577160.py:37] [Add variables]: set_filelist
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_0.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_1.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_2.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_3.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_4.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_5.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_6.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_7.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_8.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_9.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_10.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_11.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_12.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_13.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_14.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_15.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_16.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_17.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_18.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_19.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_20.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_21.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_22.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_23.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_24.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_25.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_26.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_27.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_28.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_29.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_30.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_31.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_32.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_33.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_34.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_35.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_36.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_37.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_38.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_39.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_40.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_41.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_42.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_43.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_44.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_45.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_46.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_47.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_48.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_49.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_50.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_51.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_52.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_53.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_54.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_55.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_56.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_57.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_58.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_59.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_60.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_61.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_62.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_63.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_64.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_65.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_66.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_67.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_68.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_69.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_70.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_71.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_72.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_73.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_74.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_75.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_76.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_77.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_78.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_79.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_80.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_81.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_82.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_83.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_84.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_85.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_86.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_87.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_88.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_89.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_90.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_91.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_92.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_93.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_94.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_95.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_96.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_97.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_98.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_99.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_100.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_101.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_102.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_103.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_104.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_105.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_106.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_107.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_108.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_109.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_110.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_111.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_112.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_113.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_114.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_115.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_116.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_117.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_118.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_119.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_120.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_121.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_122.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_123.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_124.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_125.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_126.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_127.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_128.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_129.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_130.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_131.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_132.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_133.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_134.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_135.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_136.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_137.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_138.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_139.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_140.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_141.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_142.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_143.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_144.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_145.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_146.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_147.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_148.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_149.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_150.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_151.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_152.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_153.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_154.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_155.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_156.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_157.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_158.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_159.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_160.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_161.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_162.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_163.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_164.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_165.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_166.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_167.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_168.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_169.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_170.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_171.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_172.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_173.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_174.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_175.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_176.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_177.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_178.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_179.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_180.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_181.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_182.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_183.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_184.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_185.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_186.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_187.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_188.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_189.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_190.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_191.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_192.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_193.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_194.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_195.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_196.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_197.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_198.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_199.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_200.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_201.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_202.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_203.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_204.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_205.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_206.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_207.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_208.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_209.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_210.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_211.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_212.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_213.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_214.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_215.csv
C:\Users\okaza\Box\DataStrorage\SPring8-2025-04\Okazaki\mDIH07\FPD_4_csv\mDIH08_48_216.csv
└── set_filelist
├── dir <class 'str'>
├── flist <class 'list'>
├── header <class 'str'>
└── footer <class 'str'>
データを読み込んで、hdfファイルに保存します。
In [4]:
import threading
import concurrent.futures as confu
In [5]:
def convertCSV2HDF():
"""更新履歴
* 2025/06/25: データの取得方法を変更
"""
# 変数読み込み
dir = data["set_filelist"]["dir"]
flist = data["set_filelist"]["flist"]
n_frame = len(flist)
# hdfファイル初期化
key = sys._getframe().f_code.co_name
hdffilename = cachedir + "/" + key + ".hdf"
theta = pd.read_csv(dir + "/" + flist[0], header = None).values.T[0]
with h5py.File(hdffilename, mode = "w") as f:
f.create_dataset(
name = "2theta",
data = theta,
shape = theta.shape,
dtype = theta.dtype
)
g = f.create_group(
name = "intensity"
)
for i in tqdm(range(n_frame)):
g.create_dataset(
name = "frame = {}".format(i),
shape = theta.shape,
dtype = theta.dtype
)
# lock
lock = threading.Lock()
# 演算
with confu.ThreadPoolExecutor(max_workers=os.cpu_count()) as tpe:
# 演算開始
futures = [
tpe.submit(
lambda filename: (
int(os.path.splitext(filename)[0].replace(data["set_filelist"]["header"], "").replace(data["set_filelist"]["footer"], "")),
pd.read_csv(dir + "/" + filename, header = None).values.T[1]),
filename
) for filename in flist
]
# 終わったプロセスから順に出力
for i, future in enumerate(confu.as_completed(futures)):
intensity = future.result()
with lock:
j = intensity[0]
with h5py.File(hdffilename, mode = "r+") as f:
f["intensity"]["frame = {}".format(j)][:] = intensity[1] # type: ignore
simple_progress_bar(i+1, n_frame)
# 表示
data[key] = dict()
data[key]["hdf"] = hdffilename
logger.info("[Add variables]: " + key)
with h5py.File(hdffilename, mode = "r") as f:
h5_tree(f)
return
convertCSV2HDF()
del convertCSV2HDF
100%|██████████| 217/217 [00:00<00:00, 50519.76it/s]
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■--] 97% (211/217)
INFO 2025-06-27 10:30:57,380 [1221129909.py:61] [Add variables]: convertCSV2HDF
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
<HDF5 file "convertCSV2HDF.hdf" (mode r)>
├── 2theta ((3800,), float64)
└── intensity
├── frame = 0 ((3800,), float64)
├── frame = 1 ((3800,), float64)
├── frame = 10 ((3800,), float64)
├── frame = 100 ((3800,), float64)
├── frame = 101 ((3800,), float64)
├── frame = 102 ((3800,), float64)
├── frame = 103 ((3800,), float64)
├── frame = 104 ((3800,), float64)
├── frame = 105 ((3800,), float64)
├── frame = 106 ((3800,), float64)
├── frame = 107 ((3800,), float64)
├── frame = 108 ((3800,), float64)
├── frame = 109 ((3800,), float64)
├── frame = 11 ((3800,), float64)
├── frame = 110 ((3800,), float64)
├── frame = 111 ((3800,), float64)
├── frame = 112 ((3800,), float64)
├── frame = 113 ((3800,), float64)
├── frame = 114 ((3800,), float64)
├── frame = 115 ((3800,), float64)
├── frame = 116 ((3800,), float64)
├── frame = 117 ((3800,), float64)
├── frame = 118 ((3800,), float64)
├── frame = 119 ((3800,), float64)
├── frame = 12 ((3800,), float64)
├── frame = 120 ((3800,), float64)
├── frame = 121 ((3800,), float64)
├── frame = 122 ((3800,), float64)
├── frame = 123 ((3800,), float64)
├── frame = 124 ((3800,), float64)
├── frame = 125 ((3800,), float64)
├── frame = 126 ((3800,), float64)
├── frame = 127 ((3800,), float64)
├── frame = 128 ((3800,), float64)
├── frame = 129 ((3800,), float64)
├── frame = 13 ((3800,), float64)
├── frame = 130 ((3800,), float64)
├── frame = 131 ((3800,), float64)
├── frame = 132 ((3800,), float64)
├── frame = 133 ((3800,), float64)
├── frame = 134 ((3800,), float64)
├── frame = 135 ((3800,), float64)
├── frame = 136 ((3800,), float64)
├── frame = 137 ((3800,), float64)
├── frame = 138 ((3800,), float64)
├── frame = 139 ((3800,), float64)
├── frame = 14 ((3800,), float64)
├── frame = 140 ((3800,), float64)
├── frame = 141 ((3800,), float64)
├── frame = 142 ((3800,), float64)
├── frame = 143 ((3800,), float64)
├── frame = 144 ((3800,), float64)
├── frame = 145 ((3800,), float64)
├── frame = 146 ((3800,), float64)
├── frame = 147 ((3800,), float64)
├── frame = 148 ((3800,), float64)
├── frame = 149 ((3800,), float64)
├── frame = 15 ((3800,), float64)
├── frame = 150 ((3800,), float64)
├── frame = 151 ((3800,), float64)
├── frame = 152 ((3800,), float64)
├── frame = 153 ((3800,), float64)
├── frame = 154 ((3800,), float64)
├── frame = 155 ((3800,), float64)
├── frame = 156 ((3800,), float64)
├── frame = 157 ((3800,), float64)
├── frame = 158 ((3800,), float64)
├── frame = 159 ((3800,), float64)
├── frame = 16 ((3800,), float64)
├── frame = 160 ((3800,), float64)
├── frame = 161 ((3800,), float64)
├── frame = 162 ((3800,), float64)
├── frame = 163 ((3800,), float64)
├── frame = 164 ((3800,), float64)
├── frame = 165 ((3800,), float64)
├── frame = 166 ((3800,), float64)
├── frame = 167 ((3800,), float64)
├── frame = 168 ((3800,), float64)
├── frame = 169 ((3800,), float64)
├── frame = 17 ((3800,), float64)
├── frame = 170 ((3800,), float64)
├── frame = 171 ((3800,), float64)
├── frame = 172 ((3800,), float64)
├── frame = 173 ((3800,), float64)
├── frame = 174 ((3800,), float64)
├── frame = 175 ((3800,), float64)
├── frame = 176 ((3800,), float64)
├── frame = 177 ((3800,), float64)
├── frame = 178 ((3800,), float64)
├── frame = 179 ((3800,), float64)
├── frame = 18 ((3800,), float64)
├── frame = 180 ((3800,), float64)
├── frame = 181 ((3800,), float64)
├── frame = 182 ((3800,), float64)
├── frame = 183 ((3800,), float64)
├── frame = 184 ((3800,), float64)
├── frame = 185 ((3800,), float64)
├── frame = 186 ((3800,), float64)
├── frame = 187 ((3800,), float64)
├── frame = 188 ((3800,), float64)
├── frame = 189 ((3800,), float64)
├── frame = 19 ((3800,), float64)
├── frame = 190 ((3800,), float64)
├── frame = 191 ((3800,), float64)
├── frame = 192 ((3800,), float64)
├── frame = 193 ((3800,), float64)
├── frame = 194 ((3800,), float64)
├── frame = 195 ((3800,), float64)
├── frame = 196 ((3800,), float64)
├── frame = 197 ((3800,), float64)
├── frame = 198 ((3800,), float64)
├── frame = 199 ((3800,), float64)
├── frame = 2 ((3800,), float64)
├── frame = 20 ((3800,), float64)
├── frame = 200 ((3800,), float64)
├── frame = 201 ((3800,), float64)
├── frame = 202 ((3800,), float64)
├── frame = 203 ((3800,), float64)
├── frame = 204 ((3800,), float64)
├── frame = 205 ((3800,), float64)
├── frame = 206 ((3800,), float64)
├── frame = 207 ((3800,), float64)
├── frame = 208 ((3800,), float64)
├── frame = 209 ((3800,), float64)
├── frame = 21 ((3800,), float64)
├── frame = 210 ((3800,), float64)
├── frame = 211 ((3800,), float64)
├── frame = 212 ((3800,), float64)
├── frame = 213 ((3800,), float64)
├── frame = 214 ((3800,), float64)
├── frame = 215 ((3800,), float64)
├── frame = 216 ((3800,), float64)
├── frame = 22 ((3800,), float64)
├── frame = 23 ((3800,), float64)
├── frame = 24 ((3800,), float64)
├── frame = 25 ((3800,), float64)
├── frame = 26 ((3800,), float64)
├── frame = 27 ((3800,), float64)
├── frame = 28 ((3800,), float64)
├── frame = 29 ((3800,), float64)
├── frame = 3 ((3800,), float64)
├── frame = 30 ((3800,), float64)
├── frame = 31 ((3800,), float64)
├── frame = 32 ((3800,), float64)
├── frame = 33 ((3800,), float64)
├── frame = 34 ((3800,), float64)
├── frame = 35 ((3800,), float64)
├── frame = 36 ((3800,), float64)
├── frame = 37 ((3800,), float64)
├── frame = 38 ((3800,), float64)
├── frame = 39 ((3800,), float64)
├── frame = 4 ((3800,), float64)
├── frame = 40 ((3800,), float64)
├── frame = 41 ((3800,), float64)
├── frame = 42 ((3800,), float64)
├── frame = 43 ((3800,), float64)
├── frame = 44 ((3800,), float64)
├── frame = 45 ((3800,), float64)
├── frame = 46 ((3800,), float64)
├── frame = 47 ((3800,), float64)
├── frame = 48 ((3800,), float64)
├── frame = 49 ((3800,), float64)
├── frame = 5 ((3800,), float64)
├── frame = 50 ((3800,), float64)
├── frame = 51 ((3800,), float64)
├── frame = 52 ((3800,), float64)
├── frame = 53 ((3800,), float64)
├── frame = 54 ((3800,), float64)
├── frame = 55 ((3800,), float64)
├── frame = 56 ((3800,), float64)
├── frame = 57 ((3800,), float64)
├── frame = 58 ((3800,), float64)
├── frame = 59 ((3800,), float64)
├── frame = 6 ((3800,), float64)
├── frame = 60 ((3800,), float64)
├── frame = 61 ((3800,), float64)
├── frame = 62 ((3800,), float64)
├── frame = 63 ((3800,), float64)
├── frame = 64 ((3800,), float64)
├── frame = 65 ((3800,), float64)
├── frame = 66 ((3800,), float64)
├── frame = 67 ((3800,), float64)
├── frame = 68 ((3800,), float64)
├── frame = 69 ((3800,), float64)
├── frame = 7 ((3800,), float64)
├── frame = 70 ((3800,), float64)
├── frame = 71 ((3800,), float64)
├── frame = 72 ((3800,), float64)
├── frame = 73 ((3800,), float64)
├── frame = 74 ((3800,), float64)
├── frame = 75 ((3800,), float64)
├── frame = 76 ((3800,), float64)
├── frame = 77 ((3800,), float64)
├── frame = 78 ((3800,), float64)
├── frame = 79 ((3800,), float64)
├── frame = 8 ((3800,), float64)
├── frame = 80 ((3800,), float64)
├── frame = 81 ((3800,), float64)
├── frame = 82 ((3800,), float64)
├── frame = 83 ((3800,), float64)
├── frame = 84 ((3800,), float64)
├── frame = 85 ((3800,), float64)
├── frame = 86 ((3800,), float64)
├── frame = 87 ((3800,), float64)
├── frame = 88 ((3800,), float64)
├── frame = 89 ((3800,), float64)
├── frame = 9 ((3800,), float64)
├── frame = 90 ((3800,), float64)
├── frame = 91 ((3800,), float64)
├── frame = 92 ((3800,), float64)
├── frame = 93 ((3800,), float64)
├── frame = 94 ((3800,), float64)
├── frame = 95 ((3800,), float64)
├── frame = 96 ((3800,), float64)
├── frame = 97 ((3800,), float64)
├── frame = 98 ((3800,), float64)
└── frame = 99 ((3800,), float64)
2. 全データの可視化¶
1次元データを線画で表示します。
In [6]:
def plot_profile():
# profileの間隔
aset = 4
# x軸の範囲
theta_range = (5, 30)
if True: # Main
# flag処理
if True:
try:
theta_range # type: ignore
except:
theta_range = None
switch_theta_range = False
else:
switch_theta_range = True
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches((6,4.5))
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
if switch_theta_range:
mask[theta<theta_range[0]] = False # type: ignore
mask[theta>theta_range[1]] = False # type: ignore
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
if switch_theta_range:
ax.set_xlim(*theta_range) # type: ignore
else:
ax.set_xlim(theta[0], theta[-1])
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
simple_progress_bar(i+1, n_frame)
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}.png".format(key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}.pdf".format(key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = 600))
return
plot_profile()
del plot_profile
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
DEBUG 2025-06-27 10:31:02,090 [123556372.py:74] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\plot_profile.png DEBUG 2025-06-27 10:31:02,629 [123556372.py:77] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\plot_profile.pdf
In [7]:
def imshow_profile():
# log形式?
# flag_log = True
# x軸の範囲
theta_range = (11.3,12.3)
# figureのサイズ
size_inches = (3, 4.5)
if True: # Main
# flag処理
if True:
# flag_log
try:
flag_log # type: ignore
except NameError:
flag_log = False
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
try:
theta_range # type: ignore
except:
theta_range = (theta[0], theta[-1])
ax.set_xlim(*theta_range) # type: ignore
# 強度データを取得
n_frame = len(data["set_filelist"]["flist"])
intensities = list()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensities.append(np.array(f["intensity"]["frame = {}".format(i)][()])) # type: ignore
intensities = np.vstack(intensities)
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta<theta_range[0]] = False # type: ignore
mask[theta>theta_range[1]] = False # type: ignore
# imshow
if flag_log:
ax.imshow(
np.log(intensities),
aspect = "auto",
extent = (theta[0], theta[-1], 0, n_frame), # type: ignore
cmap = "grey",
origin = "lower",
vmax = np.max(intensities.T[mask].T),
vmin = np.min(intensities.T[mask].T),
)
else:
ax.imshow(
intensities,
aspect = "auto",
extent = (theta[0], theta[-1], 0, n_frame), # type: ignore
cmap = "grey",
origin = "lower",
vmax = np.max(intensities.T[mask].T),
vmin = np.min(intensities.T[mask].T),
)
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
plt.close()
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}.png".format(key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
display(Image(filename = imgfilename, width = size_inches[0]*100))
return
imshow_profile()
del imshow_profile
DEBUG 2025-06-27 10:31:11,442 [2421345399.py:92] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\imshow_profile.png
3. フィッティング¶
In [8]:
from modules.peakfit import peakfit, pseudoVoigt
import matplotlib.animation as anim
KCl110¶
フィッティング範囲を絞ります。
In [11]:
def set_fitlim():
# ピーク名
peakname = "KCl110"
# profileの間隔
aset = 1
# x軸の範囲
theta_range = (10.3,11.3)
# fittingする範囲
fit_range = (10.8, 11.1)
# グラフのサイズ
size_inches = (3,5)
if True: # Main
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
ax.plot(
theta[fitmask],
(intensity + i*aset)[fitmask],
lw = 0.1,
c = "tab:orange"
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ylim = ax.get_ylim()
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/{}".format(peakname), exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
# データ格納
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["theta_range"] = theta_range
data[key][peakname]["aset"] = aset
data[key][peakname]["size_inches"] = size_inches
data[key][peakname]["fit_range"] = fit_range
data[key][peakname]["ylim"] = ylim
logger.info("[Add variables]: {}/{}".format(key, peakname))
dict_tree(data)
return
set_fitlim()
del set_fitlim
DEBUG 2025-06-27 10:31:51,924 [2156996311.py:80] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl110\set_fitlim.png
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
DEBUG 2025-06-27 10:31:52,091 [2156996311.py:83] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl110\set_fitlim.pdf
INFO 2025-06-27 10:31:52,105 [2156996311.py:96] [Add variables]: set_fitlim/KCl110
├── set_filelist
│ ├── dir <class 'str'>
│ ├── flist <class 'list'>
│ ├── header <class 'str'>
│ └── footer <class 'str'>
├── convertCSV2HDF
│ └── hdf <class 'str'>
└── set_fitlim
└── KCl110
├── theta_range <class 'tuple'>
├── aset <class 'int'>
├── size_inches <class 'tuple'>
├── fit_range <class 'tuple'>
└── ylim <class 'tuple'>
In [13]:
def autofit():
peakname = "KCl110"
if True: # Main
# 角度データを読み込み
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# 強度データを取得
n_frame = len(data["set_filelist"]["flist"])
intensities = list()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensities.append(np.array(f["intensity"]["frame = {}".format(i)][()])) # type: ignore
intensities = np.vstack(intensities)
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < data["set_fitlim"][peakname]["fit_range"][0]] = False
mask[theta > data["set_fitlim"][peakname]["fit_range"][1]] = False
theta_fit = theta[mask]
intensities_fit = intensities.T[mask].T
# 出力格納用変数を定義
res = [None]*n_frame
# フィット用関数を定義
pf = peakfit()
def process(i):
_res = pf.fit_Vigot_func(theta = theta_fit, intensity = intensities_fit[i])
res_dict = dict()
for j, k in enumerate(["popt", "pcov"]):
res_dict[k] = dict()
for l, m in enumerate(pf.variables(nop = 1)):
res_dict[k][m] = _res[j][l]
res_dict["r2"] = _res[2]
return i, res_dict
# マルチスレッドを使いながら演算
with confu.ThreadPoolExecutor() as tpe:
futures = [tpe.submit(process, i_frame) for i_frame in np.arange(n_frame)]
for i, future in enumerate(confu.as_completed(futures)):
i_frame, val = future.result()
res[i_frame] = val # type: ignore
simple_progress_bar(i+1, n_frame)
# データ格納
key = sys._getframe().f_code.co_name
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["res"] = res
logger.debug("[Add variable]: " + peakname + "/res")
logger.info("size of data: {} MB".format(sys.getsizeof(data)%1024%1024))
# データ保存
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
jsonfile = cachedir + "/{}/{}.json".format(peakname, key)
with open(jsonfile, mode = "w") as f:
json.dump(res, f, indent = 4)
logger.info("[Save json]: " + os.path.abspath(jsonfile))
dict_tree(data)
return
autofit()
del autofit
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■-] 99% (214/217)
DEBUG 2025-06-27 10:33:02,158 [788653478.py:54] [Add variable]: KCl110/res INFO 2025-06-27 10:33:02,158 [788653478.py:55] size of data: 184 MB INFO 2025-06-27 10:33:02,164 [788653478.py:62] [Save json]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl110\autofit.json
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
├── set_filelist
│ ├── dir <class 'str'>
│ ├── flist <class 'list'>
│ ├── header <class 'str'>
│ └── footer <class 'str'>
├── convertCSV2HDF
│ └── hdf <class 'str'>
├── set_fitlim
│ └── KCl110
│ ├── theta_range <class 'tuple'>
│ ├── aset <class 'int'>
│ ├── size_inches <class 'tuple'>
│ ├── fit_range <class 'tuple'>
│ └── ylim <class 'tuple'>
└── autofit
└── KCl110
└── res <class 'list'>
フィッティング結果を出力します。
In [14]:
def plot_res():
peakname = "KCl110"
if True: # Main
# 変数を読み込み
theta_range = data["set_fitlim"][peakname]["theta_range"]
fit_range = data["set_fitlim"][peakname]["fit_range"]
aset = data["set_fitlim"][peakname]["aset"]
size_inches = data["set_fitlim"][peakname]["size_inches"]
ylim = data["set_fitlim"][peakname]["ylim"]
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
pf = peakfit()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
x = np.linspace(theta[fitmask][0], theta[fitmask][-1], 200)
y: np.ndarray = pseudoVoigt(
x,
*[data["autofit"][peakname]["res"][i]["popt"][j] for j in pf.variables()]
) # type: ignore
ax.plot(
x,
y + i*aset,
lw = 0.1,
c = "tab:orange"
)
ax.plot(
[data["autofit"][peakname]["res"][i]["popt"]["mu"]],
[
data["autofit"][peakname]["res"][i]["popt"]["amp"]
+ data["autofit"][peakname]["res"][i]["popt"]["b0"]
+ data["autofit"][peakname]["res"][i]["popt"]["b1"] * data["autofit"][peakname]["res"][i]["popt"]["mu"]
+ i*aset
],
lw = 0,
marker = "o",
ms = 1,
mec = "tab:orange",
c = "1",
mew = 0.1
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ax.set_ylim(ylim)
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
return
plot_res()
del plot_res
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
DEBUG 2025-06-27 10:33:03,006 [4256538023.py:95] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl110\plot_res.png DEBUG 2025-06-27 10:33:03,227 [4256538023.py:98] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl110\plot_res.pdf
FeH111¶
フィッティング範囲を絞ります。
In [16]:
def set_fitlim():
# ピーク名
peakname = "FeH111"
# profileの間隔
aset = 0.1
# x軸の範囲
theta_range = (11.2, 12.5)
# fittingする範囲
fit_range = (11.5, 11.85)
# グラフのサイズ
size_inches = (3,5)
if True: # Main
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
ax.plot(
theta[fitmask],
(intensity + i*aset)[fitmask],
lw = 0.1,
c = "tab:orange"
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ylim = ax.get_ylim()
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/{}".format(peakname), exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
# データ格納
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["theta_range"] = theta_range
data[key][peakname]["aset"] = aset
data[key][peakname]["size_inches"] = size_inches
data[key][peakname]["fit_range"] = fit_range
data[key][peakname]["ylim"] = ylim
logger.info("[Add variables]: {}/{}".format(key, peakname))
dict_tree(data)
return
set_fitlim()
del set_fitlim
DEBUG 2025-06-27 10:33:57,504 [168385374.py:80] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\FeH111\set_fitlim.png
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
DEBUG 2025-06-27 10:33:57,692 [168385374.py:83] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\FeH111\set_fitlim.pdf
INFO 2025-06-27 10:33:57,705 [168385374.py:96] [Add variables]: set_fitlim/FeH111
├── set_filelist
│ ├── dir <class 'str'>
│ ├── flist <class 'list'>
│ ├── header <class 'str'>
│ └── footer <class 'str'>
├── convertCSV2HDF
│ └── hdf <class 'str'>
├── set_fitlim
│ ├── KCl110
│ │ ├── theta_range <class 'tuple'>
│ │ ├── aset <class 'int'>
│ │ ├── size_inches <class 'tuple'>
│ │ ├── fit_range <class 'tuple'>
│ │ └── ylim <class 'tuple'>
│ └── FeH111
│ ├── theta_range <class 'tuple'>
│ ├── aset <class 'float'>
│ ├── size_inches <class 'tuple'>
│ ├── fit_range <class 'tuple'>
│ └── ylim <class 'tuple'>
└── autofit
└── KCl110
└── res <class 'list'>
In [17]:
def autofit():
peakname = "FeH111"
if True: # Main
# 角度データを読み込み
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# 強度データを取得
n_frame = len(data["set_filelist"]["flist"])
intensities = list()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensities.append(np.array(f["intensity"]["frame = {}".format(i)][()])) # type: ignore
intensities = np.vstack(intensities)
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < data["set_fitlim"][peakname]["fit_range"][0]] = False
mask[theta > data["set_fitlim"][peakname]["fit_range"][1]] = False
theta_fit = theta[mask]
intensities_fit = intensities.T[mask].T
# 出力格納用変数を定義
res = [None]*n_frame
# フィット用関数を定義
pf = peakfit()
def process(i):
initparam = pf.calc_init(
theta = theta_fit,
intensity = intensities_fit[i]
)
initparam[1] = 11.7
_res = pf.fit_Vigot_func(
theta = theta_fit,
intensity = intensities_fit[i],
initparams = initparam
)
res_dict = dict()
for j, k in enumerate(["popt", "pcov"]):
res_dict[k] = dict()
for l, m in enumerate(pf.variables(nop = 1)):
res_dict[k][m] = _res[j][l]
res_dict["r2"] = _res[2]
return i, res_dict
# マルチスレッドを使いながら演算
with confu.ThreadPoolExecutor() as tpe:
futures = [tpe.submit(process, i_frame) for i_frame in np.arange(n_frame)]
for i, future in enumerate(confu.as_completed(futures)):
i_frame, val = future.result()
res[i_frame] = val # type: ignore
simple_progress_bar(i+1, n_frame)
# データ格納
key = sys._getframe().f_code.co_name
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["res"] = res
logger.debug("[Add variable]: " + peakname + "/res")
logger.info("size of data: {} MB".format(sys.getsizeof(data)%1024%1024))
# データ保存
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
jsonfile = cachedir + "/{}/{}.json".format(peakname, key)
with open(jsonfile, mode = "w") as f:
json.dump(res, f, indent = 4)
logger.info("[Save json]: " + os.path.abspath(jsonfile))
dict_tree(data)
return
autofit()
del autofit
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■-] 98% (212/217)
C:\Users\okaza\pythonenv\modules\peakfit.py:178: RuntimeWarning: divide by zero encountered in divide l = 1/(1+np.power((x-mu)/gamma, 2))
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■-] 98% (213/217)
C:\Users\okaza\pythonenv\modules\peakfit.py:177: RuntimeWarning: divide by zero encountered in divide g = np.exp(-np.power(x-mu, 2)/2/np.power(sigma,2)) DEBUG 2025-06-27 10:34:18,358 [2169881763.py:63] [Add variable]: FeH111/res INFO 2025-06-27 10:34:18,358 [2169881763.py:64] size of data: 184 MB INFO 2025-06-27 10:34:18,364 [2169881763.py:71] [Save json]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\FeH111\autofit.json
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
├── set_filelist
│ ├── dir <class 'str'>
│ ├── flist <class 'list'>
│ ├── header <class 'str'>
│ └── footer <class 'str'>
├── convertCSV2HDF
│ └── hdf <class 'str'>
├── set_fitlim
│ ├── KCl110
│ │ ├── theta_range <class 'tuple'>
│ │ ├── aset <class 'int'>
│ │ ├── size_inches <class 'tuple'>
│ │ ├── fit_range <class 'tuple'>
│ │ └── ylim <class 'tuple'>
│ └── FeH111
│ ├── theta_range <class 'tuple'>
│ ├── aset <class 'float'>
│ ├── size_inches <class 'tuple'>
│ ├── fit_range <class 'tuple'>
│ └── ylim <class 'tuple'>
└── autofit
├── KCl110
│ └── res <class 'list'>
└── FeH111
└── res <class 'list'>
フィッティング結果を出力します。
In [18]:
def plot_res():
peakname = "FeH111"
if True: # Main
# 変数を読み込み
theta_range = data["set_fitlim"][peakname]["theta_range"]
fit_range = data["set_fitlim"][peakname]["fit_range"]
aset = data["set_fitlim"][peakname]["aset"]
size_inches = data["set_fitlim"][peakname]["size_inches"]
ylim = data["set_fitlim"][peakname]["ylim"]
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
pf = peakfit()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
x = np.linspace(theta[fitmask][0], theta[fitmask][-1], 200)
y: np.ndarray = pseudoVoigt(
x,
*[data["autofit"][peakname]["res"][i]["popt"][j] for j in pf.variables()]
) # type: ignore
ax.plot(
x,
y + i*aset,
lw = 0.1,
c = "tab:orange"
)
ax.plot(
[data["autofit"][peakname]["res"][i]["popt"]["mu"]],
[
data["autofit"][peakname]["res"][i]["popt"]["amp"]
+ data["autofit"][peakname]["res"][i]["popt"]["b0"]
+ data["autofit"][peakname]["res"][i]["popt"]["b1"] * data["autofit"][peakname]["res"][i]["popt"]["mu"]
+ i*aset
],
lw = 0,
marker = "o",
ms = 1,
mec = "tab:orange",
c = "1",
mew = 0.1
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ax.set_ylim(ylim)
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
return
plot_res()
del plot_res
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
DEBUG 2025-06-27 10:34:22,672 [3622972237.py:95] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\FeH111\plot_res.png DEBUG 2025-06-27 10:34:22,909 [3622972237.py:98] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\FeH111\plot_res.pdf
FeH200¶
フィッティング範囲を絞ります。
In [ ]:
def set_fitlim():
# ピーク名
peakname = "FeH200"
# profileの間隔
aset = 0.1
# x軸の範囲
theta_range = (13,14)
# fittingする範囲
fit_range = (13.1,13.6)
# グラフのサイズ
size_inches = (3,5)
if True: # Main
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
ax.plot(
theta[fitmask],
(intensity + i*aset)[fitmask],
lw = 0.1,
c = "tab:orange"
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ylim = ax.get_ylim()
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/{}".format(peakname), exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
# データ格納
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["theta_range"] = theta_range
data[key][peakname]["aset"] = aset
data[key][peakname]["size_inches"] = size_inches
data[key][peakname]["fit_range"] = fit_range
data[key][peakname]["ylim"] = ylim
logger.info("[Add variables]: {}/{}".format(key, peakname))
dict_tree(data)
return
set_fitlim()
del set_fitlim
In [ ]:
def autofit():
peakname = "FeH200"
if True: # Main
# 角度データを読み込み
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# 強度データを取得
n_frame = len(data["set_filelist"]["flist"])
intensities = list()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensities.append(np.array(f["intensity"]["frame = {}".format(i)][()])) # type: ignore
intensities = np.vstack(intensities)
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < data["set_fitlim"][peakname]["fit_range"][0]] = False
mask[theta > data["set_fitlim"][peakname]["fit_range"][1]] = False
theta_fit = theta[mask]
intensities_fit = intensities.T[mask].T
# 出力格納用変数を定義
res = [None]*n_frame
# フィット用関数を定義
pf = peakfit()
def process(i):
_res = pf.fit_Vigot_func(theta = theta_fit, intensity = intensities_fit[i])
res_dict = dict()
for j, k in enumerate(["popt", "pcov"]):
res_dict[k] = dict()
for l, m in enumerate(pf.variables(nop = 1)):
res_dict[k][m] = _res[j][l]
res_dict["r2"] = _res[2]
return i, res_dict
# マルチスレッドを使いながら演算
with confu.ThreadPoolExecutor() as tpe:
futures = [tpe.submit(process, i_frame) for i_frame in np.arange(n_frame)]
for i, future in enumerate(confu.as_completed(futures)):
i_frame, val = future.result()
res[i_frame] = val # type: ignore
simple_progress_bar(i+1, n_frame)
# データ格納
key = sys._getframe().f_code.co_name
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["res"] = res
logger.debug("[Add variable]: " + peakname + "/res")
logger.info("size of data: {} MB".format(sys.getsizeof(data)%1024%1024))
# データ保存
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
jsonfile = cachedir + "/{}/{}.json".format(peakname, key)
with open(jsonfile, mode = "w") as f:
json.dump(res, f, indent = 4)
logger.info("[Save json]: " + os.path.abspath(jsonfile))
dict_tree(data)
return
autofit()
del autofit
フィッティング結果を出力します。
In [ ]:
def plot_res():
peakname = "FeH200"
if True: # Main
# 変数を読み込み
theta_range = data["set_fitlim"][peakname]["theta_range"]
fit_range = data["set_fitlim"][peakname]["fit_range"]
aset = data["set_fitlim"][peakname]["aset"]
size_inches = data["set_fitlim"][peakname]["size_inches"]
ylim = data["set_fitlim"][peakname]["ylim"]
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
pf = peakfit()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
x = np.linspace(theta[fitmask][0], theta[fitmask][-1], 200)
y: np.ndarray = pseudoVoigt(
x,
*[data["autofit"][peakname]["res"][i]["popt"][j] for j in pf.variables()]
) # type: ignore
ax.plot(
x,
y + i*aset,
lw = 0.1,
c = "tab:orange"
)
ax.plot(
[data["autofit"][peakname]["res"][i]["popt"]["mu"]],
[
data["autofit"][peakname]["res"][i]["popt"]["amp"]
+ data["autofit"][peakname]["res"][i]["popt"]["b0"]
+ data["autofit"][peakname]["res"][i]["popt"]["b1"] * data["autofit"][peakname]["res"][i]["popt"]["mu"]
+ i*aset
],
lw = 0,
marker = "o",
ms = 1,
mec = "tab:orange",
c = "1",
mew = 0.1
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ax.set_ylim(ylim)
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
return
plot_res()
del plot_res
KCl200¶
フィッティング範囲を絞ります。
In [19]:
def set_fitlim():
# ピーク名
peakname = "KCl200"
# profileの間隔
aset = 0.2
# x軸の範囲
theta_range = (14,17)
# fittingする範囲
fit_range = (14.5,16)
# グラフのサイズ
size_inches = (3,5)
if True: # Main
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
ax.plot(
theta[fitmask],
(intensity + i*aset)[fitmask],
lw = 0.1,
c = "tab:orange"
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ylim = ax.get_ylim()
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/{}".format(peakname), exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
# データ格納
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["theta_range"] = theta_range
data[key][peakname]["aset"] = aset
data[key][peakname]["size_inches"] = size_inches
data[key][peakname]["fit_range"] = fit_range
data[key][peakname]["ylim"] = ylim
logger.info("[Add variables]: {}/{}".format(key, peakname))
dict_tree(data)
return
set_fitlim()
del set_fitlim
Progress: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] 100% (217/217)
DEBUG 2025-06-27 10:35:06,570 [2992753780.py:80] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl200\set_fitlim.png DEBUG 2025-06-27 10:35:06,908 [2992753780.py:83] [Save fig]: c:\Users\okaza\pythonenv\fpd\fitting_csv\.cache\KCl200\set_fitlim.pdf
INFO 2025-06-27 10:35:06,924 [2992753780.py:96] [Add variables]: set_fitlim/KCl200
├── set_filelist
│ ├── dir <class 'str'>
│ ├── flist <class 'list'>
│ ├── header <class 'str'>
│ └── footer <class 'str'>
├── convertCSV2HDF
│ └── hdf <class 'str'>
├── set_fitlim
│ ├── KCl110
│ │ ├── theta_range <class 'tuple'>
│ │ ├── aset <class 'int'>
│ │ ├── size_inches <class 'tuple'>
│ │ ├── fit_range <class 'tuple'>
│ │ └── ylim <class 'tuple'>
│ ├── FeH111
│ │ ├── theta_range <class 'tuple'>
│ │ ├── aset <class 'float'>
│ │ ├── size_inches <class 'tuple'>
│ │ ├── fit_range <class 'tuple'>
│ │ └── ylim <class 'tuple'>
│ └── KCl200
│ ├── theta_range <class 'tuple'>
│ ├── aset <class 'float'>
│ ├── size_inches <class 'tuple'>
│ ├── fit_range <class 'tuple'>
│ └── ylim <class 'tuple'>
└── autofit
├── KCl110
│ └── res <class 'list'>
└── FeH111
└── res <class 'list'>
In [ ]:
def autofit():
peakname = "KCl200"
if True: # Main
# 角度データを読み込み
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# 強度データを取得
n_frame = len(data["set_filelist"]["flist"])
intensities = list()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensities.append(np.array(f["intensity"]["frame = {}".format(i)][()])) # type: ignore
intensities = np.vstack(intensities)
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < data["set_fitlim"][peakname]["fit_range"][0]] = False
mask[theta > data["set_fitlim"][peakname]["fit_range"][1]] = False
theta_fit = theta[mask]
intensities_fit = intensities.T[mask].T
# 出力格納用変数を定義
res = [None]*n_frame
# フィット用関数を定義
pf = peakfit()
def process(i):
_res = pf.fit_Vigot_func(theta = theta_fit, intensity = intensities_fit[i])
res_dict = dict()
for j, k in enumerate(["popt", "pcov"]):
res_dict[k] = dict()
for l, m in enumerate(pf.variables(nop = 1)):
res_dict[k][m] = _res[j][l]
res_dict["r2"] = _res[2]
return i, res_dict
# マルチスレッドを使いながら演算
with confu.ThreadPoolExecutor() as tpe:
futures = [tpe.submit(process, i_frame) for i_frame in np.arange(n_frame)]
for i, future in enumerate(confu.as_completed(futures)):
i_frame, val = future.result()
res[i_frame] = val # type: ignore
simple_progress_bar(i+1, n_frame)
# データ格納
key = sys._getframe().f_code.co_name
if not key in data.keys():
data[key] = dict()
data[key][peakname] = dict()
data[key][peakname]["res"] = res
logger.debug("[Add variable]: " + peakname + "/res")
logger.info("size of data: {} MB".format(sys.getsizeof(data)%1024%1024))
# データ保存
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
jsonfile = cachedir + "/{}/{}.json".format(peakname, key)
with open(jsonfile, mode = "w") as f:
json.dump(res, f, indent = 4)
logger.info("[Save json]: " + os.path.abspath(jsonfile))
dict_tree(data)
return
autofit()
del autofit
フィッティング結果を出力します。
In [ ]:
def plot_res():
peakname = "KCl200"
if True: # Main
# 変数を読み込み
theta_range = data["set_fitlim"][peakname]["theta_range"]
fit_range = data["set_fitlim"][peakname]["fit_range"]
aset = data["set_fitlim"][peakname]["aset"]
size_inches = data["set_fitlim"][peakname]["size_inches"]
ylim = data["set_fitlim"][peakname]["ylim"]
# figureを作成
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
fig.set_dpi(300)
fig.subplots_adjust(
left = 0.08,
right = 0.92,
bottom = 0.08,
top = 0.92
)
# xデータを読み込み(共通)
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
theta = np.array(f["2theta"][()]) # type: ignore
# mask処理
mask = np.ones(theta.shape).astype(np.bool_)
mask[theta < theta_range[0]] = False
mask[theta > theta_range[1]] = False
fitmask = np.ones(theta.shape).astype(np.bool_)
fitmask[theta < fit_range[0]] = False
fitmask[theta > fit_range[1]] = False
# すべてプロットする
n_frame = len(data["set_filelist"]["flist"])
pf = peakfit()
with h5py.File(data["convertCSV2HDF"]["hdf"], mode = "r") as f:
for i in range(n_frame):
intensity = np.array(f["intensity"]["frame = {}".format(i)][()]) # type: ignore
ax.plot(
theta[mask],
(intensity + i*aset)[mask],
lw = 0.1,
c = "0"
)
x = np.linspace(theta[fitmask][0], theta[fitmask][-1], 200)
y: np.ndarray = pseudoVoigt(
x,
*[data["autofit"][peakname]["res"][i]["popt"][j] for j in pf.variables()]
) # type: ignore
ax.plot(
x,
y + i*aset,
lw = 0.1,
c = "tab:orange"
)
ax.plot(
[data["autofit"][peakname]["res"][i]["popt"]["mu"]],
[
data["autofit"][peakname]["res"][i]["popt"]["amp"]
+ data["autofit"][peakname]["res"][i]["popt"]["b0"]
+ data["autofit"][peakname]["res"][i]["popt"]["b1"] * data["autofit"][peakname]["res"][i]["popt"]["mu"]
+ i*aset
],
lw = 0,
marker = "o",
ms = 1,
mec = "tab:orange",
c = "1",
mew = 0.1
)
simple_progress_bar(i+1, n_frame)
# axを構成
ax.set_xlabel("2theta [degree]", fontsize = 10)
ax.autoscale(tight = True)
ax.set_xlim(*theta_range) # type: ignore
ax.set_ylim(ylim)
# 画像の表示
fig.canvas.draw()
img = im.frombuffer(
mode = "RGBA",
size = fig.canvas.get_width_height(),
data = fig.canvas.buffer_rgba(), # type: ignore
decoder_name = "raw"
)
os.makedirs(cachedir + "/" + peakname, exist_ok=True)
key = sys._getframe().f_code.co_name
imgfilename = cachedir + "/{}/{}.png".format(peakname, key)
img.save(imgfilename)
logger.debug("[Save fig]: " + os.path.abspath(imgfilename))
pdffilename = cachedir + "/{}/{}.pdf".format(peakname, key)
plt.savefig(pdffilename)
logger.debug("[Save fig]: " + os.path.abspath(pdffilename))
plt.close()
display(Image(filename = imgfilename, width = size_inches[0]*100))
return
plot_res()
del plot_res